#ifndef FLAMINGDEATH_HARDWARE_H
#define FLAMINGDEATH_HARDWARE_H

/* LED info */
#define LED_PIN                   GPIO_Pin_12
#define LED_GPIO_PORT             GPIOC
#define LED_GPIO_CLK              RCC_APB2Periph_GPIOC

/* Button info */
#define BUT_PIN                   GPIO_Pin_0
#define BUT_GPIO_PORT             GPIOA
#define BUT_GPIO_CLK              RCC_APB2Periph_GPIOA

/* Bluetooth info */
#define BT_DEVICE                 USART1
#define BT_CLK                    RCC_APB2Periph_USART1
#define BT_TX_PIN                 GPIO_Pin_9
#define BT_TX_GPIO_PORT           GPIOA
#define BT_TX_GPIO_CLK            RCC_APB2Periph_GPIOA
#define BT_RX_PIN                 GPIO_Pin_10
#define BT_RX_GPIO_PORT           GPIOA
#define BT_RX_GPIO_CLK            RCC_APB2Periph_GPIOA
#define BT_IRQn                   USART1_IRQn
#define BT_BAUDRATE               9600

/* GPS info */
#define GPS_DEVICE                USART2
#define GPS_CLK                   RCC_APB1Periph_USART2
#define GPS_TX_PIN                GPIO_Pin_2
#define GPS_TX_GPIO_PORT          GPIOA
#define GPS_TX_GPIO_CLK           RCC_APB2Periph_GPIOA
#define GPS_RX_PIN                GPIO_Pin_3
#define GPS_RX_GPIO_PORT          GPIOA
#define GPS_RX_GPIO_CLK           RCC_APB2Periph_GPIOA
#define GPS_IRQn                  USART2_IRQn
#define GPS_BAUDRATE              9600

/* Compass info */
#define COMP_SCL_PIN              GPIO_Pin_6
#define COMP_SCL_PORT             GPIOB
#define COMP_SCL_CLK              RCC_APB2Periph_GPIOB
#define COMP_SDA_PIN              GPIO_Pin_7
#define COMP_SDA_PORT             GPIOB
#define COMP_SDA_CLK              RCC_APB2Periph_GPIOB

/* Accelerometer info */
#define ACCEL_DEVICE              SPI1
#define ACCEL_CLK                 RCC_APB2Periph_SPI1
#define ACCEL_SCK_PIN             GPIO_Pin_5
#define ACCEL_SCK_GPIO_PORT       GPIOA
#define ACCEL_SCK_GPIO_CLK        RCC_APB2Periph_GPIOA
#define ACCEL_MISO_PIN            GPIO_Pin_6
#define ACCEL_MISO_GPIO_PORT      GPIOA
#define ACCEL_MISO_GPIO_CLK       RCC_APB2Periph_GPIOA
#define ACCEL_MOSI_PIN            GPIO_Pin_7
#define ACCEL_MOSI_GPIO_PORT      GPIOA
#define ACCEL_MOSI_GPIO_CLK       RCC_APB2Periph_GPIOA
#define ACCEL_CS_PIN              GPIO_Pin_8
#define ACCEL_CS_GPIO_PORT        GPIOC
#define ACCEL_CS_GPIO_CLK         RCC_APB2Periph_GPIOC
#define ACCEL_IRQn                SPI1_IRQn

/* Sensor Timer */
#define SENSOR_TIME_DEVICE        TIM2
#define SENSOR_TIME_CLK           RCC_APB1Periph_TIM2
#define SENSOR_TIME_IRQn          TIM2_IRQn

/* Servo Timer */
#define SERVO_TIME_DEVICE        TIM3
#define SERVO_TIME_CLK           RCC_APB1Periph_TIM3
#define SERVO_TIME_IRQn          TIM3_IRQn
#define SERVO_STEER_PIN          GPIO_Pin_0
#define SERVO_STEER_GPIO_PORT    GPIOB
#define SERVO_STEER_CLK          RCC_APB2Periph_GPIOB
#define SERVO_THROTTLE_PIN       GPIO_Pin_1
#define SERVO_THROTTLE_GPIO_PORT GPIOB
#define SERVO_THROTTLE_CLK       RCC_APB2Periph_GPIOB

/* Encoder Timer */
#define ENCODER_TIME_DEVICE      TIM4
#define ENCODER_TIME_CLK         RCC_APB1Periph_TIM4
#define ENCODER_TIME_IRQn        TIM4_IRQn
#define ENCODER_DATA_PIN         GPIO_Pin_6
#define ENCODER_DATA_GPIO_PORT   GPIOC
#define ENCODER_DATA_CLK         RCC_APB2Periph_GPIOC


#endif
